package org.dromara.system.domain.bo;

import org.dromara.system.domain.AppWarehouseRecord;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;

/**
 * 入库记录业务对象 app_warehouse_record
 *
 * @author Lion Li
 * @date 2025-09-12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = AppWarehouseRecord.class, reverseConvertGenerate = false)
public class AppWarehouseRecordBo extends BaseEntity {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 入库方式 0自动入库 1手动入库
     */
    private Long storageType;

    /**
     * 采购计划编号
     */
    private String planCode;

    /**
     * 装车总重量
     */
    @NotNull(message = "装车总重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long loadTotalWeight;

    /**
     * 装车皮重
     */
    @NotNull(message = "装车皮重不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long loadTareWeight;

    /**
     * 装货重量
     */
    @NotNull(message = "装货重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long loadNetWeight;

    /**
     * 过磅总重量
     */
    @NotNull(message = "过磅总重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long weighingTotalWeight;

    /**
     * 皮重
     */
    @NotNull(message = "皮重不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long tareWeight;

    /**
     * 材料卸货总重量
     */
    @NotNull(message = "材料卸货总重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long materialUnloadWeight;

    /**
     * 路损
     */
    @NotNull(message = "路损不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long roadLoss;

    /**
     * 扣除吨数
     */
    @NotNull(message = "扣除吨数不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long deductWeight;

    /**
     * 采购净重量
     */
    @NotNull(message = "采购净重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long netPurchaseWeight;

    /**
     * 包数
     */
    @NotNull(message = "包数不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long packageNum;

    /**
     * 仓储标识
     */
    @NotBlank(message = "仓储标识不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseCode;

    /**
     * 仓库管理员
     */
    @NotBlank(message = "仓库管理员不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseAdmin;

    /**
     * 入库车辆的车牌号
     */
    @NotBlank(message = "入库车辆的车牌号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseCarPlate;

    /**
     * 入库日期
     */
    @NotNull(message = "入库日期不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date warehouseDate;

    /**
     * 公司名称
     */
    @NotBlank(message = "公司名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String companyName;

    /**
     * 原料类型
     */
    @NotBlank(message = "原料类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String materialType;

    /**
     * 种类
     */
    @NotBlank(message = "种类不能为空", groups = { AddGroup.class, EditGroup.class })
    private String category;

    /**
     * 仓库
     */
    @NotBlank(message = "仓库不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseName;

    /**
     * 入库数量
     */
    @NotNull(message = "入库数量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long storageQuantity;

    /**
     * 备注
     */
    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
    private String remark;


}
